package com.eastfair.venuebooking.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 场地表
 * </p>
 *
 * @author linan
 * @since 2023-01-05
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vb_space")
@ApiModel(value = "Space", description = "场地表")
@AllArgsConstructor
public class Space extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用：1是；0否")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 场地名称
     */
    @ApiModelProperty(value = "场地名称")
    @Size(max = 60, message = "场地名称长度不能超过60")
    @TableField(value = "space_name", condition = LIKE)
    @Excel(name = "场地名称")
    private String spaceName;

    /**
     * 场地分类id
     */
    @ApiModelProperty(value = "场地分类id")
    @TableField(value = "space_category_id")
    @Excel(name = "场地分类id")
    private Long spaceCategoryId;

    /**
     * 场地保证金
     */
    @ApiModelProperty(value = "场地保证金")
    @TableField(value = "space_deposit")
    @Excel(name = "场地保证金")
    private BigDecimal spaceDeposit;

    /**
     * 服务预付款
     */
    @ApiModelProperty(value = "服务预付款")
    @TableField(value = "service_advance_charge")
    @Excel(name = "服务预付款")
    private BigDecimal serviceAdvanceCharge;

    /**
     * 计价面积
     */
    @ApiModelProperty(value = "计价面积")
    @TableField(value = "price_area")
    @Excel(name = "计价面积")
    private Double priceArea;

    /**
     * 建筑面积
     */
    @ApiModelProperty(value = "建筑面积")
    @TableField(value = "build_area")
    @Excel(name = "建筑面积")
    private Double buildArea;

    /**
     * 排序
     */
    @ApiModelProperty(value = "排序")
    @TableField(value = "sort")
    @Excel(name = "排序")
    private Integer sort;

    /**
     * 所在位置
     */
    @ApiModelProperty(value = "所在位置")
    @Size(max = 64, message = "所在位置长度不能超过64")
    @TableField(value = "location", condition = LIKE)
    @Excel(name = "所在位置")
    private String location;

    /**
     * VR地址
     */
    @ApiModelProperty(value = "VR地址")
    @Size(max = 255, message = "VR地址长度不能超过255")
    @TableField(value = "vr_url", condition = LIKE)
    @Excel(name = "VR地址")
    private String vrUrl;

    /**
     * 图纸数量
     */
    @ApiModelProperty(value = "图纸数量")
    @TableField(value = "attachment_count")
    @Excel(name = "图纸数量")
    private Integer attachmentCount;

    /**
     * 多个标签","隔开
     */
    @ApiModelProperty(value = "多个标签\",\"隔开")
    @Size(max = 255, message = "多个标签\",\"隔开长度不能超过255")
    @TableField(value = "tag", condition = LIKE)
    @Excel(name = "多个标签\",\"隔开")
    private String tag;

    /**
     * 容纳人数
     */
    @ApiModelProperty(value = "容纳人数")
    @TableField(value = "capacity")
    @Excel(name = "容纳人数")
    private Integer capacity;

    /**
     * 场地编码
     */
    @ApiModelProperty(value = "场地编码")
    @Size(max = 255, message = "场地编码长度不能超过255")
    @TableField(value = "space_code", condition = LIKE)
    @Excel(name = "场地编码")
    private String spaceCode;

    /**
     * 同步状态：1已同步；0未同步
     */
    @ApiModelProperty(value = "同步状态：1已同步；0未同步")
    @TableField(value = "sync_state")
    @Excel(name = "同步状态：1已同步；0未同步")
    private Integer syncState;


    @Builder
    public Space(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    String spaceName, Long spaceCategoryId, BigDecimal spaceDeposit, BigDecimal serviceAdvanceCharge, Double priceArea, Double buildArea, 
                    Integer sort, String location, String vrUrl, Integer attachmentCount, String tag, Integer capacity, 
                    String spaceCode, Integer syncState) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.spaceName = spaceName;
        this.spaceCategoryId = spaceCategoryId;
        this.spaceDeposit = spaceDeposit;
        this.serviceAdvanceCharge = serviceAdvanceCharge;
        this.priceArea = priceArea;
        this.buildArea = buildArea;
        this.sort = sort;
        this.location = location;
        this.vrUrl = vrUrl;
        this.attachmentCount = attachmentCount;
        this.tag = tag;
        this.capacity = capacity;
        this.spaceCode = spaceCode;
        this.syncState = syncState;
    }

}
